package com.taxis.service;

import java.util.List;
import org.hibernate.*;

import com.taxis.common.HibernateUtil;
import com.taxis.model.Usuario;

public class UsuarioDaoService {

	private List<Usuario> usuarios;
	private Usuario usuario;

	public UsuarioDaoService(){ }

	public void insertUsuario(Usuario u) throws Exception{
		Session session = HibernateUtil.currentSession();
		Transaction tx = null;
		try{
			tx = session.beginTransaction();
			session.save(u);
			tx.commit();
		}catch(RuntimeException re){
			if(u != null){
				tx.rollback();
			}
			throw re;
		}finally{
			session.close();
		}
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> getAllUsuarios() {
		Session session = HibernateUtil.currentSession();
		try {
			Query q = session.getNamedQuery("getAllUsuarios");
			usuarios = (List<Usuario>)q.list();
			return usuarios;
		} catch(Exception e) {
			System.out.println("Error while fetching USUARIOS");
			e.printStackTrace();
			return null;
		} finally {
			session.close();        	
		}
	}

	public Usuario getUsuario(Integer idUsuario) throws Exception {
		Session session = HibernateUtil.currentSession();
		try {
			return (Usuario)session.get(Usuario.class, idUsuario);
		} finally {
			session.close();
		}
	}

	public void updateUsuario(Usuario u) throws Exception {
		Session session = HibernateUtil.currentSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();
			session.update(u);
			tx.commit();
		} catch(RuntimeException re) {
			if(u != null)
				tx.rollback();
			throw re;
		} finally {
			session.close();
		}
	}

	public void deleteUsuario(Integer idUsuario) throws Exception {
		Session session = HibernateUtil.currentSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();
			usuario = (Usuario)session.load(Usuario.class, idUsuario);
			session.delete(usuario);
			tx.commit();
		} catch (RuntimeException e) {
			if(usuario != null)
				tx.rollback();
			throw e;
		} finally {
			session.close();
		}
	}
	
	public Usuario findByUsernameAndPassword(String usuario, String password) {
		Session session = HibernateUtil.currentSession();
		try {
			Query q = session.getNamedQuery("findByUsernameAndPassword");
			q.setString("usuario", usuario); q.setString("password",password);
			return (Usuario)q.uniqueResult();
		} catch(Exception e) {
			System.out.println("Error while fetching USUARIO");
			e.printStackTrace();
			return null;
		} finally {
			session.close();        	
		}
	}
}